import { getToken } from "./auth"
import store from "@/store/index.js"
import config from "@/config"
import errorCode from '@/utils/errorCode.js'
import { toast, showConfirm, tansParams } from '@/utils/common'

export let METHOD = {
    GET: "get",
    POST: "post",
    PUT: "put"
}
let env = process.env.NODE_ENV
const baseUrl = config[env].baseUrl
let timeout = 10000

export let request = (config) => {
	const isToken = (config.headers || {}).isToken === false
	config.header = config.header || {}
	if(getToken() && !isToken) {
		config.header["Authorization"] = "Bearer " + getToken()
	}
	//get请求映射参数
	if(config.params){
		let url = config.url+"?"+tansParams(config.params)
		url = url.slice(0,-1)
		config.url = url
	}
	return new Promise((resolve,reject)=> {
		uni.request({
			method:config.method || "get",
			timeout:config.timeout || timeout,
			url: config.baseUrl || baseUrl + config.url,
			data:config.data,
			header:config.header,
			dataType:"json"
		}).then(response => {
			 let [isSuccess,res] = response
			 if(isSuccess){
				 toast("后端接口连接异常")
				 reject("后端接口连接异常")
				 return
			 }
			 const code = res.data.code || 200
			 const msg = errorCode[code] || res.data.msg || errorCode["default"]
			 if(code===401){
				 showConfirm("登录状态已过期，您可以继续留在该页面，或者重新登录?").then(res=> {
					 if(res.confirm){
						 store.dispatch("LogOut").then(res => {
							 uni.reLaunch({
							 	url:"/pages/login/login"
							 })
						 })
					 }
				 })
				 reject("无效的会话，或者会话已过期，请重新登录")
			 } else if(code === 500){
				toast(msg)
				reject("500")
			 } else if(code !== 200){
				 toast(msg)
				 reject(code)
			 }
			 resolve(res.data)
		}).catch(error=> {
			let { message } = error
			if (message === 'Network Error') {
			  message = '后端接口连接异常'
			} else if (message.includes('timeout')) {
			  message = '系统接口请求超时'
			} else if (message.includes('Request failed with status code')) {
			  message = '系统接口' + message.substr(message.length - 3) + '异常'
			}
			toast(message)
			reject(error)
		})
	})
}

